//class Solution {
//public:
//    bool checkPerfectNumber(int num) {
//        if (num == 1) return false;
//        int sum = 1;
//        for (int i = 2; i <= num / 2; i++)
//        {
//            if (num % i == 0)
//            {
//                sum += i;
//            }
//        }
//        if (sum == num) return true;
//        return false;
//    }
//};

//class Solution {
//public:
//    int findBottomLeftValue(TreeNode* root) {
//        int ret = 0, height = 0, maxheight = 0;
//        dfs(root, ret, height, maxheight);
//        return ret;
//    }
//    void dfs(TreeNode* root, int& ret, int height, int& maxheight)
//    {
//        if (root == nullptr) return;
//        height++;
//        dfs(root->left, ret, height, maxheight);
//        dfs(root->right, ret, height, maxheight);
//        if (height > maxheight)
//        {
//            maxheight = height;
//            ret = root->val;
//        }
//    }
//};

//class Solution {
//public:
//    int findBottomLeftValue(TreeNode* root) {
//        queue<TreeNode*> q;
//        q.push(root);
//        TreeNode* tmp;
//        while (!q.empty())
//        {
//            tmp = q.front();
//            q.pop();
//            if (tmp->right) q.push(tmp->right);
//            if (tmp->left) q.push(tmp->left);
//        }
//        return tmp->val;
//    }
//};

